import Mock from "mockjs";

/**
 * 提交线索
 *
 * 先根据传入的 phone 从 client_entroll_clue 表中查找记录，如果有的话进一步判断：
 *  - 如果这条记录的 student_user_id 字段不为空，说明这个手机号已经是学员了，就不允许提交线索，返回提示。
 *  - 如果这条记录的 create_time 距离现在不到 30 天，说明这条线索还在保护期，就不允许提交线索，返回提示。 ********备注：无论时间有没有超过，每个用户只能对一个人提交一次线索的机会   ********
 *  - 如果不符合上述条件，就更新这条线索的内容。
 * 如果没有，则创建一条线索。
 * 其中 submit_user_id 为提交者的id，后续根据这个来查询“我提供的线索”。
 *
 * @param param 线索内容
 * @returns 是否创建成功
 */
export const submitClue = async (
  param: ClueSubmitParam
): Promise<ClueSubmitResult> => {
  const res = await Mock.mock({
    isSuccess: true,
    failReason: "",
  });

  return res;
};

/**
 * 获取我提供的线索，支持模糊查询
 */
export const listMineClue = async (keyword: string): Promise<ListClue[]> => {
  const res = await Mock.mock({
    "list|10": [
      {
        id: "@integer(1, 100)",
        name: "@cname",
        phone: "@integer(13000000000, 19999999999)",
        address: "@county(true)",
        comment: "@cparagraph(1, 3)",
        registered: "@boolean",
        createTime: 1691143890537,
      },
    ],
  });

  return res;
};

/**
 * 获取我邀请的用户数
 *
 * 根据当前用户的 id 从 client_user 表中获取 invite_user_id 字段为当前用户 id 的用户数。
 *
 * select count(*) from client_user where invite_user_id=${userId}
 *
 */
export const listMyInviteUser = async (): Promise<ListInvitedUserResult[]> => {
  const res = await Mock.mock({
    "list|10": [
      {
        nickname: "@cname",
        avatar: "@image(200x200, @color, @word)",
        createTime: "@datetime",
      },
    ],
  });

  return res;
};

/**
 * 获取推广员业绩
 *
 * - totalReward：累计奖励
 *   - 从 client_checkout_order 表中获取 client_user_id 为当前用户的全部记录，然后累加 checkout_amount 字段。
 * - totalInvite：累计邀请
 *   - 从 client_user 表中获取 invite_user_id 为当前用户的全部记录，然后计算数量。
 */
export const listMyPerformance = async (): Promise<ListPerformanceResult> => {
  const res = await Mock.mock({
    totalReward: "@integer(100, 1000)",
    totalInvite: "@integer(100, 1000)",
  });

  return res;
};

/**
 * 获取推广数据明细
 * 入参：
 * 结算状态status：空、1、2
 *    不传：train_checkout_order查询无附加条件
 *    1：train_checkout_order.status = 1 的数据
 *    2：train_checkout_order.status = 2 的数据
 * 奖励类型type：空、字符串
 *    对应过滤 train_checkout_order.checkout_type
 * 分页参数
 *
 * 在 train_checkout_order 中查询 member_id 为当前用户的记录，取得 checkout_amount、train_order_id，
 * 然后根据 train_checkout_order.train_order_id 关联 train_order 表查询，取得 sku_id、pay_time、order_price，
 * 然后根据 train_order.sku_id 到 train_product_sku 表中查询 sku_name。
 *
 * 根据 train_order.member_id 去 member_user 表中查询，取得用户 avatar、nickname。
 *
 * total 是查询到的记录总数。
 */
export const listMyPerformanceDetail =
  async (): Promise<ListPerformanceDetailResult> => {
    const res = await Mock.mock({
      "list|10": [
        {
          skuName: "@ctitle(10, 20)",
          skuId: "123",
          payTime: "@datetime",
          orderPrice: "@integer(100, 1000)",
          avatar: "@url",
          nickname: "@cname",
          checkoutAmount: "@integer(100, 1000)",
          trainOrderId: "123",
        },
      ],
      total: "@integer(100, 1000)",
    });

    return res;
  };

/**
 * 在 train_checkout_order 中查询 member_id 为当前登录用户的所有结算单，
 * totalPrice 是查询到的 checkout_amount 的累加
 * hasSettlePrice 是这些结算单中 status = 2 的 checkout_amount 累加
 * notSettlePrice 是这些结算单中 status = 1 的 checkout_amount 累加
 */
export const getMyPerformancePrice =
  async (): Promise<PerformancePriceResp> => {
    const res = await Mock.mock({
      totalPrice: "@integer(100, 1000)",
      hasSettlePrice: "@integer(100, 1000)",
      notSettlePrice: "@integer(100, 1000)",
    });
    return res;
  };
